#ifndef _SOCKS_COMMON_H_
#define _SOCKS_COMMON_H_ 1

typedef enum S5_AutenticationTypes
{
	// No authentication is required
	NO_AUTENTICATION_REQUIRED = 0x00,
	// GSSAPI
	GSSAPI = 0x01,
	// Username and password required
	USERNAME_PASSWORD = 0x02,
	/*IANA_ASSIGNED = 0x03 - 0x7F*/
	/*RESERVED_FOR_PRIVATE_METHODS = 0x80 - 0xFE*/
	// No acceptable methods
	NO_ACCEPTABLE_METHODS = 0xFF
} S5_AUTHENTICATION_TYPES;

typedef enum S5_ConnectionTypes
{
	TCP_STREAM = 0x01,
	TCP_BIND = 0x02,
	UDP_ASSOCIATE = 0x03
} S5_CONNECTION_TYPES;

typedef enum S5_AddressType
{
	IPv4 = 0x01,
	DOMAIN_NAME = 0x03,
	IPv6 = 0x04
} S5_ADDRESS_TYPE;

typedef enum S5_ServerResponse
{
	REQUEST_GRANTED = 0x00,
	GENERAL_FAILURE = 0x01,
	CONNECTION_NOT_ALLOWED_BY_RULESET = 0x02,
	NETWORK_UNREACHABLE = 0x03,
	HOST_UNREACHABLE = 0x04,
	CONNECTION_REFUSED_BY_DESTINATION_HOST = 0x05,
	TTL_EXPIRED = 0x06,
	COMMAND_NOT_SUPPORTED = 0x07,
	PROTTOCOL_ERROR = COMMAND_NOT_SUPPORTED,
	ADDRESS_TYPE_NOT_SUPPORTED = 0x08
} S5_SERVER_RESPONSE;

#endif